package com.chromatic.competition.utils;

import androidx.annotation.NonNull;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;

import java.io.StringReader;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

import okhttp3.ResponseBody;
import retrofit2.Converter;
import retrofit2.Retrofit;

/**
 * 宽松的 JSON 转换器工厂类
 */
public class LenientJsonConverterFactory extends Converter.Factory {
    private final Gson gson;

    public LenientJsonConverterFactory() {
        this.gson = new GsonBuilder()
                .setLenient()
                .create();
    }
    /**
     * 创建宽松的 JSON 转换器工厂实例
     *
     * @return 宽松的 JSON 转换器工厂实例
     */
    public static LenientJsonConverterFactory create() {
        return new LenientJsonConverterFactory();
    }

    @Override
    public Converter<ResponseBody, ?> responseBodyConverter(@NonNull Type type, @NonNull Annotation[] annotations, @NonNull Retrofit retrofit) {
        TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
        return (Converter<ResponseBody, Object>) value -> {
            try (value) {
                // 读取响应体字符串
                String responseBodyString = value.string();
                // 创建 JsonReader 对象并设置宽松模式
                JsonReader jsonReader = new JsonReader(new StringReader(responseBodyString));
                jsonReader.setLenient(true);
                // 使用适配器读取 JSON 并返回结果
                return adapter.read(jsonReader);
            }
        };
    }
}